Efficient virtualization environments typically comprise virtual machine managers that redistribute memory resources without disrupting operation of virtual machines executing within the environment. Memory resource redistribution can include distributing memory resources amongst virtual machines executing within the virtualization environment, or distributing memory resources to new virtual machines provisioned within the virtualization environment. In some instances, a virtual memory manager may redistribute memory resources from virtual machines having sufficient memory resources to other virtual machines that are either non-responsive or excessively swapping pages.
One method of reclaiming memory resources from a virtual machine includes submitting an inflate instruction to a balloon driver of the virtual machine (e.g., by placing a value in a designated memory location which is periodically monitored). The balloon driver of the virtual machine responds to the inflate instruction by (i) requesting that the guest operating system of the virtual machine provide physical memory to the balloon driver and (ii) invoking a hypervisor procedure which de-allocates the provided physical memory from the virtual machine. Once the administrator has reclaimed enough physical memory, the administrator allocates that reclaimed physical memory to the other virtual machine.
There are deficiencies to the above-described conventional approach to reclaiming physical memory from a virtual machine. For example, when the balloon driver requests the guest operating system of the virtual machine to provide physical memory, the guest operating system typically provides only regular sized pages (i.e., standard 4 KB pages) rather than super pages (i.e., 2 MB pages) of physical memory. However, the goal may be to reclaim super pages from the virtual machine and then allocate those super pages to the other virtual machine. Although it may be possible to coalesce the regular sized pages provided by the guest operating system into super pages, the guest operating system would need to satisfy multiple requests for physical memory in order to provide enough regular sized pages (contiguous on super page boundaries) for a subsequent coalescing process to render a meaningful number of super pages, and such a process would be extremely burdensome and time consuming.